# Filters added to this controller apply to all controllers in the application.
# Likewise, all the methods added will be available for all controllers.

class ApplicationController < ActionController::Base
  # Pick a unique cookie name to distinguish our session data from others'
  session :session_key => '_catalogos_session_id'
  before_filter :check_authentication, :except => [:signin, :authenticate]

  def check_authentication
    unless session[:user]
      session[:intended_action] = action_name
      redirect_to :controller => '/login', :action => 'signin'

    end
  end
  
  def perfil_nacional?
    nacional_id = Catalogo.valor_id('Regiones Ejecutivos', 'Nacional')
    
    if session[:user]
      ejecutivo = Ejecutivo.find(session[:user])
      
      ejecutivo.region_id == nacional_id
    else
      false

    end
    
  end
  
  def mando_medio?
    gerente_id = Catalogo.valor_id('Puestos Ejecutivos','Gerente CDC')
    jefe_grupo_id = Catalogo.valor_id('Puestos Ejecutivos','Jefe de Grupo')
    gerente_op_id = Catalogo.valor_id('Puestos Ejecutivos','Gerente OP')
    
    if session[:user]
      ejecutivo = Ejecutivo.find(session[:user])
      
      ejecutivo.puesto_id == gerente_id || ejecutivo.puesto_id == jefe_grupo_id
    else
      false
      
    end
  end
  
  def gerente?
    gerente_id = Catalogo.valor_id('Puestos Ejecutivos','Gerente CDC')
    gerente_op_id = Catalogo.valor_id('Puestos Ejecutivos','Gerente OP')
    
    if session[:user]
      ejecutivo = Ejecutivo.find(session[:user])
      
      ejecutivo.puesto_id == gerente_id || ejecutivo.puesto_id == gerente_op_id
    else
      false
      
    end
    
  end
  def find_children_ids(ejecutivo)
    ids = Array.new

    ejecutivo.children.each do |e|
      ids << find_children_ids(e)
    end if ejecutivo.children.size > 0

    ids << ejecutivo.id if ejecutivo.status_id == 1
    ids.flatten

  end

  def registrar_presupuesto(orden_salida, presupuesto_id)
    presupuesto = Presupuesto.find(presupuesto_id)
    registro = OrdenSalidaPresupuesto.new(:disponible => presupuesto.disponible,
      :presupuesto_id => presupuesto_id)
    orden_salida.orden_salida_presupuestos << registro
    
    orden_salida.save!
  end
  
  def perfil_admin?
    admin_id = Catalogo.valor_id('Puestos Ejecutivos', 'Administrador Sistema')
    
    if session[:user]
      ejecutivo = Ejecutivo.find(session[:user])
      
      ejecutivo.puesto_id == admin_id
    else
      false
    end
  end
  
  def perfil_ejecutivo?
    perfil = 4 # Catalogo.valor_id('Puestos Ejecutivo', 'Ejecutivo CDC')
    
    if session[:user]
      ejecutivo = Ejecutivo.find(session[:user])
      
      ejecutivo.puesto_id == perfil
    else
      false
    end
    
  end
  
  def validar_presupuestos(marcas)
    marcas.each do |m|
      presupuesto = Presupuesto.find(m[0])
      importe_solicitado = m[1][:saldo_inicial].to_f
      logger.debug "#{importe_solicitado}"
      if importe_solicitado > 0.0
        return presupuesto.autorizar(importe_solicitado)
      end
    end
  end
  
  def gerente_op?
    perfil = Catalogo.valor_id('Puestos Ejecutivos','Gerente OP')
    
    if session[:user]
      ejecutivo = Ejecutivo.find(session[:user])
      
      ejecutivo.puesto_id == perfil
    else
      false
      
    end
  end

  def create_cargo(presupuesto_id, importe_ieps)
    presupuesto = Presupuesto.find(presupuesto_id)
    cargo = PresupuestoDetalle.new(:operacion => PresupuestoDetalle::CARGO,
      :importe => importe_ieps)
    presupuesto.presupuesto_detalles << cargo
      
    presupuesto.save!
    
  end
  
  def perfil_captura?
    coordinador = Catalogo.valor_id('Puestos Ejecutivos', 'Coordinador')
    capturista = Catalogo.valor_id('Puestos Ejecutivos', 'Capturista')
    
    if session[:user]
      usuario = Ejecutivo.find(session[:user])
      
      usuario.puesto_id == coordinador || usuario.puesto_id == capturista
    else
      false
      
    end
  end
  
  def perfil_director?
    director = Catalogo.valor_id('Puestos Ejecutivos', 'Director Nacional')
    
    if session[:user]
      usuario = Ejecutivo.find(session[:user])
      
      usuario.puesto_id == director
    else
      false
      
    end
  end
  
  def perfil_asistente?
    asistente = Catalogo.valor_id('Puestos Ejecutivos', 'Asistente')
    
    if session[:user]
      usuario = Ejecutivo.find(session[:user])
      
      usuario.puesto_id == asistente
    else
      false
    end
  end
end
